package cn.hairui.blog.service;

import cn.hairui.blog.entity.Artical;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author laoganbu
 * @since 2020-04-06
 */
public interface ArticalService extends IService<Artical> {

    /**
     * <p>根据传入关键字排序并筛选指定数量文章</p>
     *
     * @param count 数量
     * @param key   排序字段
     * @return
     */
    List<Artical> listTop(int count, String key);

    /**
     * 获取所有文章数量
     *
     * @return
     */
    int count();

    /**
     * 通过是否展示查询文章
     *
     * @param showFlag 展示标志 Y展示 N不展示
     * @return
     */
    List<Map> selectByShowFlag(String showFlag);


    /**
     * 通过帐号查询所有文章
     *
     * @param account
     * @return
     */
    List<Map> selectByAccount(String account);

    /**
     * 添加文章 返回文章编号
     *
     * @param artical
     * @return
     */
    int add(Artical artical);

    /**
     * 通过 是否展示标志 和分类编号查询文章
     *
     * @param showFlag 展示标志 Y展示 N不展示
     * @param typeId   分类编号
     * @return
     */
    List<Map> selectByShowFlagTypeId(String showFlag, int typeId);

    /**
     * 通过创建人编号 是否展示标志 和标签编号查询文章
     *
     * @param showFlag 展示标志 Y展示 N不展示
     * @param tagId    标签编号
     * @return
     */
    List<Map> selectByShowFlagTagId(String showFlag, int tagId);

    /**
     * 获取所有是否展示标志下对应文章的年份以及该年份下的文章数量
     *
     * @param showFlag 是否展示 Y是 N否
     * @return
     */
    List<Map> selectYearAndCount(String showFlag);

    /**
     * 通过年份和是否展示标志获取指定数量文章
     *
     * @param year     年份
     * @param showFlag 是否展示 Y展示 N不展示
     * @param count    数量
     * @return
     */
    List<Artical> selectByYearAndShowFlag(String year, String showFlag, int count);

    /**
     * 获取传入年份下指定是否展示的文章信息
     *
     * @param showFlag 是否展示 Y是 N否
     * @param year     年份
     * @return
     */
    List<Map> selectByShowFlagAndYear(String showFlag, int year);

    /**
     * 查找上一篇文章 按照id降序排序取第一篇
     *
     * @param id
     * @return
     */
    Artical findLastArtical(int id);

    /**
     * 查找下一篇文章 按照id升序排序取第一篇
     *
     * @param id
     * @return
     */
    Artical findNextArtical(int id);

    /**
     * 更新点赞和查看次数
     *
     * @param id
     * @param liketimes
     * @param viewtimes
     */
    void updateLVTimesById(int id, int liketimes, int viewtimes);
}
